/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package scil;
/**
 * @author jose junior
 */

import scil.autor.Autor;
import scil.autor.CadAutor;
import scil.autor.IRepAutor;
import scil.autor.RepAutor;
import scil.cliente.CadCliente;
import scil.cliente.Cliente;
import scil.cliente.IRepCliente;
import scil.cliente.RepCliente;
import scil.editora.CadEditora;
import scil.editora.Editora;
import scil.editora.IRepEditora;
import scil.editora.RepEditora;
import scil.endereco.*;
import scil.livro.*;
import scil.pedido.*;
import scil.excecoes.ScilException;
import scil.grafica.*;

public class FachadaScil {
	  private static FachadaScil instancia;

	  private CadastroEndereco enderecos;
          private CadEditora editoras;
          private CadAutor autores;
          private CadastroLivro lv;
          private CadGrafica grafica;
          private CadPedido ped;
          private CadCliente clientes;


	  private FachadaScil() {
	    initCadastros();
	  }

	  private void initCadastros() {
		  IRepEndereco reposEnderecos = new RepEndereco();
                  enderecos = new CadastroEndereco(reposEnderecos);

                  IRepEditora reposEditoras = new RepEditora();
                  editoras = new CadEditora(reposEditoras);

                  IRepAutor reposAutores = new RepAutor();
                  autores = new CadAutor(reposAutores);

                  IRepositorioLivro repLv = new RepositorioLivro();
                  lv = new CadastroLivro(repLv);

                  IRepGrafica repgraf = new RepGrafica();
                  grafica = new CadGrafica(repgraf);

                  IRepPedido reped = new RepPedido();
                  ped = new CadPedido(reped);

                  IRepCliente reposClientes = new RepCliente();
                  clientes = new CadCliente(reposClientes);


	  }

	  public static FachadaScil obterInstancia() {
	    if (instancia == null) {
	      instancia = new FachadaScil();
	    }
	    return instancia;
	  }

	  // Enderecos
	  public int cadastrarEndereco (Endereco novoEnd) throws ScilException {
                  int codigo =0;
		  codigo = enderecos.inserir(novoEnd);
                  return codigo;
	  }
	  public Endereco consultarEndereco(int codigo) throws ScilException {
	     return enderecos.consultar(codigo);
	  }
	  public void alterarEndereco (Endereco altEnd) throws ScilException {
		  enderecos.alterar(altEnd);
	  }
	  public void excluirEndereco (Endereco end) throws ScilException{
	          enderecos.excluir(end);
	  }

       	  // Editoras
	  public int cadastrarEditora (Editora novoedi) throws ScilException {
        	 int codigo = editoras.inserir(novoedi);
                 return codigo;
	  }
	  public Editora consultarEditora(int codigo) throws ScilException {
	     return editoras.consultar(codigo);
	  }
	  public Editora consultarProximaEditora(int codigo) throws ScilException {
	     return editoras.consultarProximo(codigo);
	  }
	  public Editora consultarAnteriorEditora(int codigo) throws ScilException {
	     return editoras.consultarAnterior(codigo);
	  }
	  public Editora consultarPrimeiroEditora(int codigo) throws ScilException {
	     return editoras.consultarPrimeiro(codigo);
	  }
	  public Editora consultarUltimoEditora(int codigo) throws ScilException {
	     return editoras.consultarUltimo(codigo);
	  }
	  public void alterarEditora (Editora altedi) throws ScilException {
		  editoras.alterar(altedi);
	  }
	  public void excluirEditora (Editora edi) throws ScilException{
	          editoras.excluir(edi);
	  }
          // Autores
	  public void cadastrarAutor (Autor novoautor) throws ScilException {
		  autores.inserir(novoautor);
	  }
	  public Autor consultarAutor(int codigo) throws ScilException {
	     return autores.consultar(codigo);
	  }
	  public void alterarAutor (Autor altautor) throws ScilException {
		  autores.alterar(altautor);
	  }
	  public void excluirAutor (Autor aut) throws ScilException{
	          autores.excluir(aut);
	  }
          //Livros
          public void cadastrarLivro (Livro novolv) throws ScilException
          {
            lv.inserir(novolv);
	  }
	  public Livro consultarLivro(int codigo) throws ScilException
          {
	    return lv.consultar(codigo);
	  }
          public Livro titulos() throws ScilException
          {
	    return lv.titulos();
	  }
          public Livro consultarLivro(String nome) throws ScilException
          {
	    return lv.consultar(nome);
	  }
	  public Livro consultarProximaLivro(int codigo) throws ScilException {
	     return lv.consultarProximo(codigo);
	  }
	  public Livro consultarAnteriorLivro(int codigo) throws ScilException {
	     return lv.consultarAnterior(codigo);
	  }
	  public Livro consultarPrimeiroLivro(int codigo) throws ScilException {
	     return lv.consultarPrimeiro(codigo);
	  }
	  public Livro consultarUltimoLivro(int codigo) throws ScilException {
	     return lv.consultarUltimo(codigo);
	  }

          public void alterarLivro (Livro alteLv) throws ScilException
          {
            lv.alterar(alteLv);
	  }
	  public void excluirLivro (Livro ExLv) throws ScilException
          {
	    lv.excluir(ExLv);
	  }

          // Grafica
	  public void cadastrarGrafica (Grafica novograf) throws ScilException {
		  grafica. inserir(novograf);
	  }
	  public Grafica consultarGrafica(int codigo) throws ScilException {
	     return grafica.consultar(codigo);
	  }
	  public void alterarGrafica (Grafica altgraf) throws ScilException {
		  grafica.alterar(altgraf);
	  }
	  public void excluirGrafica (Grafica graf) throws ScilException{
	          grafica.excluir(graf);
	  }
          public Grafica consultarProximoGrafica (int codigo) throws ScilException {
	     return grafica.consultarProximo(codigo);
	  }
	  public Grafica consultarAnteriorGrafica (int codigo) throws ScilException {
	     return grafica.consultarAnterior(codigo);
	  }
	  public Grafica consultarPrimeiroGrafica (int codigo) throws ScilException {
	     return grafica.consultarPrimeiro(codigo);
	  }
	  public Grafica consultarUltimoGrafica (int codigo) throws ScilException {
	     return grafica.consultarUltimo(codigo);
	  }


          //Pedidos
          public int cadastrarPedido (Pedido novoped,int val) throws ScilException
          {
            int cod=ped.inserir(novoped,val);
            return cod;
	  }
         public void cadastrarPedido2 (Pedido novoped,int val) throws ScilException
          {
            ped.inserir2(novoped,val);
	  }
	  public Pedido consultarPedido(int codigo) throws ScilException
          {
	    return ped.consultar(codigo);
	  }
	  public Pedido consultarProximaPedido(int codigo) throws ScilException {
	     return ped.consultarProximo(codigo);
	  }
	  public Pedido consultarAnteriorPedido(int codigo) throws ScilException {
	     return ped.consultarAnterior(codigo);
	  }
	  public Pedido consultarPrimeiroPedido(int codigo) throws ScilException {
	     return ped.consultarPrimeiro(codigo);
	  }
	  public Pedido consultarUltimoPedido(int codigo) throws ScilException {
	     return ped.consultarUltimo(codigo);
	  }

          public void alterarPedido (Pedido alteped) throws ScilException
          {
            ped.alterar(alteped);
	  }
	  public void excluirPedido (Pedido Exped) throws ScilException
          {
	    ped.excluir(Exped);
	  }
          public String sugereData (String data) throws ScilException
          {
	    return ped.sugereData(data);
            
	  }
    // Clientes
	  public String cadastrarCliente (Cliente novocli) throws ScilException {
        	 String codigo = clientes.inserir(novocli);
                 return codigo;
	  }
	  public Cliente consultarCliente (String codigo) throws ScilException {
	     return clientes.consultar(codigo);
	  }
	  public Cliente consultarProximoCliente(String codigo) throws ScilException {
	     return clientes.consultarProximo(codigo);
	  }
	  public Cliente consultarAnteriorCliente(String codigo) throws ScilException {
	     return clientes.consultarAnterior(codigo);
	  }
	  public Cliente consultarPrimeiroCliente (String codigo) throws ScilException {
	     return clientes.consultarPrimeiro(codigo);
	  }
	  public Cliente consultarUltimoCliente (String codigo) throws ScilException {
	     return clientes.consultarUltimo(codigo);
	  }
	  public void alterarCliente (Cliente altcli) throws ScilException {
		  clientes.alterar(altcli);
	  }
	  public void excluirCliente (Cliente cli) throws ScilException{
	          clientes.excluir(cli);
	  }




}

